#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>

void sig_handler(int signo) // 回调函数 信号产生多次只处理一次
{
  printf("SIGINT received %d\n", signo);
  return;
}

int main()
{
  struct sigaction sa, oldsa;  // 信号处理结构体
  sa.sa_handler = sig_handler; //  回调函数
  sa.sa_flags = 0;             // 默认是0
  sigemptyset(&sa.sa_mask);    // 信号屏蔽字
  // 在此信号处理函数中，屏蔽信号，防止信号处理函数被调用，导致死循环,且此信号屏蔽字只在回调函数执行时有效
  sigaction(SIGINT, &sa, &oldsa); // 注册信号处理函数,捕捉信号是内核实现的，用户态只是注册一个回调函数

  while (1)
    ;

  return 0;
}